package edu.biwu.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;

import javax.sql.DataSource;

@Configuration //代表这是一个Spring配置类,相当于将XML中配置转换成Java类和注解形式
public class DBConfig {

    /*从配置文件中将值注入到指定的属性中 方便类中使用*/
    @Value("${jdbc.driver}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.user}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    /**
     * //@Bean 用于返回实例的方法上,相当于将方法的返回值定义成一个Bean
     *         Bean的id默认就是方法名
     *         相当于<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"></bean>
     * @return
     */
    @Bean("dataSource")
    public DataSource initDataSource() {
        /*新建数据源,给数据库设置数据库连接信息*/
        DruidDataSource dataSource = new DruidDataSource();

        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        return dataSource;
    }

    /**
     * @Bean("queryRunner") 相当于  <bean class="org.apache.commons.dbutils.QueryRunner" id="queryRunner">
     * @param dataSource
     * @return
     */
    @Bean("queryRunner")
    @Scope("prototype")//将QueryRunner指定成多例,可以防止多线程安全问题,便于事务管理
    public QueryRunner initQueryRunner(DataSource dataSource){
        return new QueryRunner(dataSource);
    }
}
